import { prompt, auth } from "@/utils/T";

import {childConfig} from "@/config";

const {apiDomain} = window.ENV || {};

const requestConfig: any[] = [
  // IAM请求配置
  {
    baseURL: apiDomain,
    timeout: childConfig.timeout,
    // `withCredentials`指示是否跨站点访问控制请求
    withCredentials: false,
    // “responseType”表示服务器将响应的数据类型
    // 包括 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'
    responseType: "json",
    // 可选的，全局设置 request 是否返回 response 对象，默认为 false
    withFullResponse: false,
    // headers`是要发送的自定义 headers
    headers: {

    },
    interceptors: {
      request: {
        onConfig: (config: any) => {
          // 在发送请求之前做某事
          const token = auth.getToken();
          if (token && !config.headers.ACCESS_TOKEN) {
            config.headers.ACCESS_TOKEN = token;
          }
          return config;
        },
        onError: (error: Error) => {
          return Promise.reject(error);
        },
      },
      response: {
        onConfig: (response: any) => {
          // 先过滤无需检查的路由
          if (childConfig.noCheckIsLoginApi.indexOf(response.config.url) === -1) {
            if (response.data && response.data.status) {
              if (
                parseInt(response.data.status) === 201 &&
                parseInt(response.data.code) === 10201
              ) {
                // 未登录
                prompt.setLogout();
                return Promise.reject(new Error());
              }
              if (
                parseInt(response.data.code) === 500
              ) {
                // 数据请求发生错误
                prompt.error('数据请求发生错误！');
                return Promise.reject(new Error());
              }
            }
          }
          return response;
        },
        onError: (error:Error) => {
          let errorInfo = error.message;
          if (errorInfo.indexOf('timeout')!==-1 || errorInfo.indexOf('Network Error')!==-1) {
            errorInfo = '网络异常，请求超时，请稍后再试！';
          }
          if (errorInfo.indexOf('404')!==-1) {
            errorInfo = '网络异常404，无法连接服务器！';
          }
          if (errorInfo.indexOf('500')!==-1) {
            errorInfo = '网络服务异常!';
          }
          return Promise.reject({
            msg: errorInfo
          });
        },
      },
    },
  }
];

export default requestConfig;
